iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 7
0

動機

  • 現代的應用程式大多為多重執行緒。
  • 執行緒主要是在應用程式內執行。
  • 因為一個程式內需要做的事情很多,所以如果一個個來執行的話,效率並不好,所以這時候就需要用到「多重執行緒」,分別為:
  1. Update display
  2. Fetch data
  3. Spell checking
  4. Answer a network request
  • 可以簡化程式碼,達到提高效率的功用。
  • 多重執行緒是在核心中產生。

優點

  • Responseiveness:回應速度快,且不受阻擋。
  • Resources Sharing:在共享資源中,比共享記憶體或傳送訊息來得簡單。
  • Economy:比新增行程便宜,且在進行轉換時,比進行環境轉換更為低負荷。
  • Scalability:可利用多處理器架構,,且在數量變化上好控制,能夠在多CPU下並行處理。

多核心程式

  • 多核心或多重處理器系統,對於工程師來說是個不簡單的挑戰,其內容包含:
  1. Dividing activities
  2. Balance
  3. Data splitting
  4. Data dependency
  5. Testing and debugging
  • 並行 vs. 平行:
  1. 平行:有兩個CPU,各自分配到一個行程,然後同時進行。
  2. 並行:在一個CPU內,兩個行程互相交換執行,也就是一個行動時,另一個就停止。
  • 平行種類有兩種:
  1. Data parallelism: 將資料分配到不同的核心上執行,且操作方式一樣。
  2. Task parallelism: 將不同的執行緒分配到不同的核心上執行,且其操作方式不同。
  • 隨著執行緒數目的增加,其支持架構在成長:
  1. CPU擁有核心以及硬體執行緒。
  2. Oracle SPARC T4為8核心,而每一核心為8執行緒。

Amdahl's Law

  • 主要目的就是辨識說使用平行方法之後效率增加多少。
  • S是代表多少是循環的;N是代表使用了多少核心。
  • 舉例來說,一個應用程式中有75%是使用平行方法,25%是串行,那從CPU1移動到CPU2的速度會是原本的1.6倍。
  • 所以,如果能都使用parallel處理的話,那整體速度絕對會提升;可是如果使用多核心,卻都用serial處理,那擁有多核心也沒有多大的用處。

使用者執行緒與核心執行緒

  • User-threads:由user-level threads library負責管理。
  • 三個主要的threads libraries:
  1. POSIX Pthreads
  2. Windows threads
  3. Java threads
  • Kernel threads:由核心支持。
  • 主要有:
  1. Windows
  2. Linux
  3. Mac OS X

多重執行緒模組

  • 總共有3種,分別為Many-to-one、One-to-One、Many-to-Many。

Many-to-one

  • 多個user-level threads對應到單一一個kernel thread。
  • 如果一個執行緒被鎖住的話,全部的執行緒也會跟著被鎖住。
  • 目前少數系統使用此模組。

One-to-One

  • 每一user-level thread對應到一個kernel thread。
  • 每新增一個user thread,就要新增一個kernel thread。
  • 每個行程中能有多少的執行緒是有所限制的。
  • 能平行執行。
  • 為目前大多系統使用的模組。

Many-to-many

  • 多個user threads對應多個kernel threads。
  • 但user threads的數量不用跟kernel threads一樣。
  • OS會在中間調控數量。

Two-level Model

  • 跟Many-to-Many相像,但可以允許user thread跟kernel thread綁定在一起。
  • 例子有:IRIX、HP-UX、Tru64 UNIX等。

上一篇
DAY6 處理器概念(下)
下一篇
DAY 8 Threads(下)
系列文
作業系統概論30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言